home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 October: Mac OS SDK / Dev.CD Oct 97 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Universal / Interfaces / PInterfaces / MacMemory.p < prev    next >
Encoding:
Text File  |  1997-08-12  |  20.9 KB  |  640 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        MacMemory.p
  3.  
  4.      Contains:    Memory Manager Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.0.1
  8.  
  9.      Copyright:    © 1985-1997 by Apple Computer, Inc., all rights reserved
  10.  
  11.      Bugs?:        Please include the the file and version information (from above) with
  12.                  the problem description.  Developers belonging to one of the Apple
  13.                  developer programs can submit bug reports to:
  14.  
  15.                      devsupport@apple.com
  16.  
  17. }
  18. {$IFC UNDEFINED UsingIncludes}
  19. {$SETC UsingIncludes := 0}
  20. {$ENDC}
  21.  
  22. {$IFC NOT UsingIncludes}
  23.  UNIT MacMemory;
  24.  INTERFACE
  25. {$ENDC}
  26.  
  27. {$IFC UNDEFINED __MACMEMORY__}
  28. {$SETC __MACMEMORY__ := 1}
  29.  
  30. {$I+}
  31. {$SETC MacMemoryIncludes := UsingIncludes}
  32. {$SETC UsingIncludes := 1}
  33.  
  34. {$IFC UNDEFINED __TYPES__}
  35. {$I Types.p}
  36. {$ENDC}
  37. {$IFC UNDEFINED __MIXEDMODE__}
  38. {$I MixedMode.p}
  39. {$ENDC}
  40.  
  41.  
  42. {$PUSH}
  43. {$ALIGN MAC68K}
  44. {$LibExport+}
  45.  
  46.  
  47.  
  48. CONST
  49.     maxSize                        = $00800000;                    { Max data block size is 8 megabytes }
  50.  
  51.     defaultPhysicalEntryCount    = 8;
  52.  
  53.                                                                 {  values returned from the GetPageState function  }
  54.     kPageInMemory                = 0;
  55.     kPageOnDisk                    = 1;
  56.     kNotPaged                    = 2;
  57.  
  58.                                                                 {  masks for Zone->heapType field  }
  59.     k32BitHeap                    = 1;                            {  valid in all Memory Managers  }
  60.     kNewStyleHeap                = 2;                            {  true if new Heap Manager is present  }
  61.     kNewDebugHeap                = 4;                            {  true if new Heap Manager is running in debug mode on this heap  }
  62.  
  63. {  Note: The type "Size" moved to Types.h  }
  64.  
  65.  
  66.  
  67. TYPE
  68.     GrowZoneProcPtr = ProcPtr;  { FUNCTION GrowZone(cbNeeded: Size): LONGINT; }
  69.  
  70.     PurgeProcPtr = ProcPtr;  { PROCEDURE Purge(blockToPurge: Handle); }
  71.  
  72.     UserFnProcPtr = Register68kProcPtr;  { PROCEDURE UserFn(parameter: UNIV Ptr); }
  73.  
  74.     GrowZoneUPP = UniversalProcPtr;
  75.     PurgeUPP = UniversalProcPtr;
  76.     UserFnUPP = UniversalProcPtr;
  77.     ZonePtr = ^Zone;
  78.     Zone = RECORD
  79.         bkLim:                    Ptr;
  80.         purgePtr:                Ptr;
  81.         hFstFree:                Ptr;
  82.         zcbFree:                LONGINT;
  83.         gzProc:                    GrowZoneUPP;
  84.         moreMast:                INTEGER;
  85.         flags:                    INTEGER;
  86.         cntRel:                    INTEGER;
  87.         maxRel:                    INTEGER;
  88.         cntNRel:                INTEGER;
  89.         heapType:                SInt8;                                    {  previously "maxNRel", now holds flags (e.g. k32BitHeap) }
  90.         unused:                    SInt8;
  91.         cntEmpty:                INTEGER;
  92.         cntHandles:                INTEGER;
  93.         minCBFree:                LONGINT;
  94.         purgeProc:                PurgeUPP;
  95.         sparePtr:                Ptr;
  96.         allocPtr:                Ptr;
  97.         heapData:                INTEGER;
  98.     END;
  99.  
  100.     THz                                    = ^Zone;
  101.     MemoryBlockPtr = ^MemoryBlock;
  102.     MemoryBlock = RECORD
  103.         address:                Ptr;
  104.         count:                    LONGINT;
  105.     END;
  106.  
  107.     LogicalToPhysicalTablePtr = ^LogicalToPhysicalTable;
  108.     LogicalToPhysicalTable = RECORD
  109.         logical:                MemoryBlock;
  110.         physical:                ARRAY [0..7] OF MemoryBlock;
  111.     END;
  112.  
  113.     PageState                            = INTEGER;
  114.     StatusRegisterContents                = INTEGER;
  115.  
  116. CONST
  117.     uppGrowZoneProcInfo = $000000F0;
  118.     uppPurgeProcInfo = $000000C0;
  119.     uppUserFnProcInfo = $00009802;
  120.  
  121. FUNCTION NewGrowZoneProc(userRoutine: GrowZoneProcPtr): GrowZoneUPP;
  122.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  123.     INLINE $2E9F;
  124.     {$ENDC}
  125.  
  126. FUNCTION NewPurgeProc(userRoutine: PurgeProcPtr): PurgeUPP;
  127.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  128.     INLINE $2E9F;
  129.     {$ENDC}
  130.  
  131. FUNCTION NewUserFnProc(userRoutine: UserFnProcPtr): UserFnUPP;
  132.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  133.     INLINE $2E9F;
  134.     {$ENDC}
  135.  
  136. FUNCTION CallGrowZoneProc(cbNeeded: Size; userRoutine: GrowZoneUPP): LONGINT;
  137.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  138.     INLINE $205F, $4E90;
  139.     {$ENDC}
  140.  
  141. PROCEDURE CallPurgeProc(blockToPurge: Handle; userRoutine: PurgeUPP);
  142.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  143.     INLINE $205F, $4E90;
  144.     {$ENDC}
  145.  
  146. PROCEDURE CallUserFnProc(parameter: UNIV Ptr; userRoutine: UserFnUPP);
  147.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  148.     {To be implemented:  Glue to move parameters into registers.}
  149.     {$ENDC}
  150.  
  151.  
  152. FUNCTION GetApplLimit: Ptr;
  153.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  154.     INLINE $2EB8, $0130;
  155.     {$ENDC}
  156. FUNCTION SystemZone: THz;
  157.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  158.     INLINE $2EB8, $02A6;
  159.     {$ENDC}
  160. FUNCTION ApplicationZone: THz;
  161.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  162.     INLINE $2EB8, $02AA;
  163.     {$ENDC}
  164. FUNCTION GZSaveHnd: Handle;
  165.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  166.     INLINE $2EB8, $0328;
  167.     {$ENDC}
  168. FUNCTION TopMem: Ptr;
  169.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  170.     INLINE $2EB8, $0108;
  171.     {$ENDC}
  172. FUNCTION MemError: OSErr;
  173.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  174.     INLINE $3EB8, $0220;
  175.     {$ENDC}
  176.  
  177.  
  178. FUNCTION GetZone: THz;
  179.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  180.     INLINE $A11A, $2E88;
  181.     {$ENDC}
  182. FUNCTION NewHandle(byteCount: Size): Handle;
  183.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  184.     INLINE $201F, $A122, $2E88;
  185.     {$ENDC}
  186. FUNCTION NewHandleSys(byteCount: Size): Handle;
  187.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  188.     INLINE $201F, $A522, $2E88;
  189.     {$ENDC}
  190. FUNCTION NewHandleClear(byteCount: Size): Handle;
  191.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  192.     INLINE $201F, $A322, $2E88;
  193.     {$ENDC}
  194. FUNCTION NewHandleSysClear(byteCount: Size): Handle;
  195.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  196.     INLINE $201F, $A722, $2E88;
  197.     {$ENDC}
  198. FUNCTION HandleZone(h: Handle): THz;
  199.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  200.     INLINE $205F, $A126, $2E88;
  201.     {$ENDC}
  202. FUNCTION RecoverHandle(p: Ptr): Handle;
  203.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  204.     INLINE $205F, $A128, $2E88;
  205.     {$ENDC}
  206. FUNCTION RecoverHandleSys(p: Ptr): Handle;
  207.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  208.     INLINE $205F, $A528, $2E88;
  209.     {$ENDC}
  210. FUNCTION NewPtr(byteCount: Size): Ptr;
  211.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  212.     INLINE $201F, $A11E, $2E88;
  213.     {$ENDC}
  214. FUNCTION NewPtrSys(byteCount: Size): Ptr;
  215.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  216.     INLINE $201F, $A51E, $2E88;
  217.     {$ENDC}
  218. FUNCTION NewPtrClear(byteCount: Size): Ptr;
  219.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  220.     INLINE $201F, $A31E, $2E88;
  221.     {$ENDC}
  222. FUNCTION NewPtrSysClear(byteCount: Size): Ptr;
  223.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  224.     INLINE $201F, $A71E, $2E88;
  225.     {$ENDC}
  226. FUNCTION PtrZone(p: Ptr): THz;
  227.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  228.     INLINE $205F, $A148, $2E88;
  229.     {$ENDC}
  230. FUNCTION MaxBlock: LONGINT;
  231.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  232.     INLINE $A061, $2E80;
  233.     {$ENDC}
  234. FUNCTION MaxBlockSys: LONGINT;
  235.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  236.     INLINE $A461, $2E80;
  237.     {$ENDC}
  238. FUNCTION StackSpace: LONGINT;
  239.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  240.     INLINE $A065, $2E80;
  241.     {$ENDC}
  242. FUNCTION NewEmptyHandle: Handle;
  243.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  244.     INLINE $A166, $2E88;
  245.     {$ENDC}
  246. FUNCTION NewEmptyHandleSys: Handle;
  247.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  248.     INLINE $A566, $2E88;
  249.     {$ENDC}
  250. PROCEDURE HLock(h: Handle);
  251.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  252.     INLINE $205F, $A029;
  253.     {$ENDC}
  254. PROCEDURE HUnlock(h: Handle);
  255.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  256.     INLINE $205F, $A02A;
  257.     {$ENDC}
  258. PROCEDURE HPurge(h: Handle);
  259.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  260.     INLINE $205F, $A049;
  261.     {$ENDC}
  262. PROCEDURE HNoPurge(h: Handle);
  263.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  264.     INLINE $205F, $A04A;
  265.     {$ENDC}
  266. PROCEDURE HLockHi(h: Handle);
  267.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  268.     INLINE $205F, $A064, $A029;
  269.     {$ENDC}
  270. FUNCTION TempNewHandle(logicalSize: Size; VAR resultCode: OSErr): Handle;
  271.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  272.     INLINE $3F3C, $001D, $A88F;
  273.     {$ENDC}
  274. FUNCTION TempMaxMem(VAR grow: Size): Size;
  275.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  276.     INLINE $3F3C, $0015, $A88F;
  277.     {$ENDC}
  278. FUNCTION TempFreeMem: LONGINT;
  279.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  280.     INLINE $3F3C, $0018, $A88F;
  281.     {$ENDC}
  282. PROCEDURE InitZone(pgrowZone: GrowZoneUPP; cmoreMasters: INTEGER; limitPtr: UNIV Ptr; startPtr: UNIV Ptr);
  283. PROCEDURE SetZone(hz: THz);
  284.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  285.     INLINE $205F, $A01B;
  286.     {$ENDC}
  287. FUNCTION CompactMem(cbNeeded: Size): Size;
  288.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  289.     INLINE $201F, $A04C, $2E80;
  290.     {$ENDC}
  291. FUNCTION CompactMemSys(cbNeeded: Size): Size;
  292.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  293.     INLINE $201F, $A44C, $2E80;
  294.     {$ENDC}
  295. PROCEDURE PurgeMem(cbNeeded: Size);
  296.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  297.     INLINE $201F, $A04D;
  298.     {$ENDC}
  299. PROCEDURE PurgeMemSys(cbNeeded: Size);
  300.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  301.     INLINE $201F, $A44D;
  302.     {$ENDC}
  303. FUNCTION FreeMem: LONGINT;
  304.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  305.     INLINE $A01C, $2E80;
  306.     {$ENDC}
  307. FUNCTION FreeMemSys: LONGINT;
  308.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  309.     INLINE $A41C, $2E80;
  310.     {$ENDC}
  311. PROCEDURE ReserveMem(cbNeeded: Size);
  312.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  313.     INLINE $201F, $A040;
  314.     {$ENDC}
  315. PROCEDURE ReserveMemSys(cbNeeded: Size);
  316.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  317.     INLINE $201F, $A440;
  318.     {$ENDC}
  319. FUNCTION MaxMem(VAR grow: Size): Size;
  320.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  321.     INLINE $225F, $A11D, $2288, $2E80;
  322.     {$ENDC}
  323. FUNCTION MaxMemSys(VAR grow: Size): Size;
  324.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  325.     INLINE $225F, $A51D, $2288, $2E80;
  326.     {$ENDC}
  327. PROCEDURE SetGrowZone(growZone: GrowZoneUPP);
  328.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  329.     INLINE $205F, $A04B;
  330.     {$ENDC}
  331. PROCEDURE MoveHHi(h: Handle);
  332.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  333.     INLINE $205F, $A064;
  334.     {$ENDC}
  335. PROCEDURE DisposePtr(p: Ptr);
  336.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  337.     INLINE $205F, $A01F;
  338.     {$ENDC}
  339. FUNCTION GetPtrSize(p: Ptr): Size;
  340. PROCEDURE SetPtrSize(p: Ptr; newSize: Size);
  341.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  342.     INLINE $201F, $205F, $A020;
  343.     {$ENDC}
  344. PROCEDURE DisposeHandle(h: Handle);
  345.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  346.     INLINE $205F, $A023;
  347.     {$ENDC}
  348. PROCEDURE SetHandleSize(h: Handle; newSize: Size);
  349.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  350.     INLINE $201F, $205F, $A024;
  351.     {$ENDC}
  352.     NOTE
  353.     
  354.     GetHandleSize and GetPtrSize are documented in Inside Mac as returning 0 
  355.     in case of an error, but the traps actually return an error code in D0.
  356.     The glue sets D0 to 0 if an error occured.
  357. }
  358. FUNCTION GetHandleSize(h: Handle): Size;
  359. FUNCTION InlineGetHandleSize(h: Handle): Size;
  360.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  361.     INLINE $205F, $A025, $2E80;
  362.     {$ENDC}
  363. PROCEDURE ReallocateHandle(h: Handle; byteCount: Size);
  364.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  365.     INLINE $201F, $205F, $A027;
  366.     {$ENDC}
  367. PROCEDURE ReallocateHandleSys(h: Handle; byteCount: Size);
  368.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  369.     INLINE $201F, $205F, $A427;
  370.     {$ENDC}
  371. PROCEDURE EmptyHandle(h: Handle);
  372.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  373.     INLINE $205F, $A02B;
  374.     {$ENDC}
  375. PROCEDURE HSetRBit(h: Handle);
  376.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  377.     INLINE $205F, $A067;
  378.     {$ENDC}
  379. PROCEDURE HClrRBit(h: Handle);
  380.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  381.     INLINE $205F, $A068;
  382.     {$ENDC}
  383. FUNCTION HGetState(h: Handle): SInt8;
  384.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  385.     INLINE $205F, $A069, $1E80;
  386.     {$ENDC}
  387. PROCEDURE HSetState(h: Handle; flags: SInt8);
  388.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  389.     INLINE $101F, $205F, $A06A;
  390.     {$ENDC}
  391. PROCEDURE PurgeSpace(VAR total: LONGINT; VAR contig: LONGINT);
  392. {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM }
  393. {
  394.     PurgeSpaceTotal and PurgeSpaceContiguous are currently only implement
  395.     on classic 68K.  The are the same as PurgeSpace() but return just
  396.     one value (either total space purgable or contiguous space purgable).
  397. }
  398. FUNCTION PurgeSpaceTotal: LONGINT;
  399.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  400.     INLINE $A062, $2E88;
  401.     {$ENDC}
  402. FUNCTION PurgeSpaceContiguous: LONGINT;
  403.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  404.     INLINE $A062, $2E80;
  405.     {$ENDC}
  406. FUNCTION PurgeSpaceSysTotal: LONGINT;
  407.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  408.     INLINE $A562, $2E88;
  409.     {$ENDC}
  410. FUNCTION PurgeSpaceSysContiguous: LONGINT;
  411.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  412.     INLINE $A562, $2E80;
  413.     {$ENDC}
  414. {$ENDC}
  415.  
  416. {****************************************************************************
  417.  
  418.     The routines: 
  419.  
  420.         BlockMoveUncached
  421.         BlockMoveDataUncached
  422.         BlockZero
  423.         BlockZeroUncached
  424.     
  425.     are intended for developers writing drivers. They do not exist in 
  426.     “InterfaceLib.” You must link with “DriverServicesLib” to access them.
  427.     
  428.     But since BlockMove and BlockMoveData exist in both “InterfaceLib” and
  429.     “DriverServicesLib”, you cannot link with both libraries.
  430.     
  431. ****************************************************************************}
  432. PROCEDURE BlockMove(srcPtr: UNIV Ptr; destPtr: UNIV Ptr; byteCount: Size);
  433.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  434.     INLINE $201F, $225F, $205F, $A02E;
  435.     {$ENDC}
  436. PROCEDURE BlockMoveData(srcPtr: UNIV Ptr; destPtr: UNIV Ptr; byteCount: Size);
  437.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  438.     INLINE $201F, $225F, $205F, $A22E;
  439.     {$ENDC}
  440. PROCEDURE BlockMoveUncached(srcPtr: UNIV Ptr; destPtr: UNIV Ptr; byteCount: Size); C;
  441. PROCEDURE BlockMoveDataUncached(srcPtr: UNIV Ptr; destPtr: UNIV Ptr; byteCount: Size); C;
  442. PROCEDURE BlockZero(destPtr: UNIV Ptr; byteCount: Size); C;
  443. PROCEDURE BlockZeroUncached(destPtr: UNIV Ptr; byteCount: Size); C;
  444.  
  445. PROCEDURE MaxApplZone;
  446.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  447.     INLINE $A063;
  448.     {$ENDC}
  449. PROCEDURE SetApplBase(startPtr: UNIV Ptr);
  450.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  451.     INLINE $205F, $A057;
  452.     {$ENDC}
  453. PROCEDURE MoreMasters;
  454.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  455.     INLINE $A036;
  456.     {$ENDC}
  457. PROCEDURE SetApplLimit(zoneLimit: UNIV Ptr);
  458.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  459.     INLINE $205F, $A02D;
  460.     {$ENDC}
  461.  
  462.  
  463. PROCEDURE InitApplZone;
  464.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  465.     INLINE $A02C;
  466.     {$ENDC}
  467.  
  468. {  Temporary Memory routines renamed, but obsolete, in System 7.0 and later.  }
  469. PROCEDURE TempHLock(h: Handle; VAR resultCode: OSErr);
  470.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  471.     INLINE $3F3C, $001E, $A88F;
  472.     {$ENDC}
  473. PROCEDURE TempHUnlock(h: Handle; VAR resultCode: OSErr);
  474.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  475.     INLINE $3F3C, $001F, $A88F;
  476.     {$ENDC}
  477. PROCEDURE TempDisposeHandle(h: Handle; VAR resultCode: OSErr);
  478.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  479.     INLINE $3F3C, $0020, $A88F;
  480.     {$ENDC}
  481. FUNCTION TempTopMem: Ptr;
  482.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  483.     INLINE $3F3C, $0016, $A88F;
  484.     {$ENDC}
  485. FUNCTION HoldMemory(address: UNIV Ptr; count: LONGINT): OSErr;
  486.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  487.     INLINE $225F, $205F, $7000, $A05C, $3E80;
  488.     {$ENDC}
  489. FUNCTION UnholdMemory(address: UNIV Ptr; count: LONGINT): OSErr;
  490.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  491.     INLINE $225F, $205F, $7001, $A05C, $3E80;
  492.     {$ENDC}
  493. FUNCTION LockMemory(address: UNIV Ptr; count: LONGINT): OSErr;
  494.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  495.     INLINE $225F, $205F, $7002, $A05C, $3E80;
  496.     {$ENDC}
  497. FUNCTION LockMemoryForOutput(address: UNIV Ptr; count: LONGINT): OSErr;
  498.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  499.     INLINE $225F, $205F, $700A, $A05C, $3E80;
  500.     {$ENDC}
  501. FUNCTION LockMemoryContiguous(address: UNIV Ptr; count: LONGINT): OSErr;
  502.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  503.     INLINE $225F, $205F, $7004, $A05C, $3E80;
  504.     {$ENDC}
  505. FUNCTION UnlockMemory(address: UNIV Ptr; count: LONGINT): OSErr;
  506.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  507.     INLINE $225F, $205F, $7003, $A05C, $3E80;
  508.     {$ENDC}
  509. FUNCTION GetPhysical(VAR addresses: LogicalToPhysicalTable; VAR physicalEntryCount: LONGINT): OSErr;
  510. FUNCTION DeferUserFn(userFunction: UserFnUPP; argument: UNIV Ptr): OSErr;
  511.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  512.     INLINE $201F, $205F, $A08F, $3E80;
  513.     {$ENDC}
  514. FUNCTION DebuggerGetMax: LONGINT;
  515.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  516.     INLINE $7000, $A08D, $2E80;
  517.     {$ENDC}
  518. PROCEDURE DebuggerEnter;
  519.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  520.     INLINE $7001, $A08D;
  521.     {$ENDC}
  522. PROCEDURE DebuggerExit;
  523.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  524.     INLINE $7002, $A08D;
  525.     {$ENDC}
  526. PROCEDURE DebuggerPoll;
  527.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  528.     INLINE $7003, $A08D;
  529.     {$ENDC}
  530. FUNCTION GetPageState(address: UNIV Ptr): PageState;
  531.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  532.     INLINE $205F, $7004, $A08D, $3E80;
  533.     {$ENDC}
  534. FUNCTION PageFaultFatal: BOOLEAN;
  535.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  536.     INLINE $7005, $A08D, $1E80;
  537.     {$ENDC}
  538. FUNCTION DebuggerLockMemory(address: UNIV Ptr; count: LONGINT): OSErr;
  539.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  540.     INLINE $225F, $205F, $7006, $A08D, $3E80;
  541.     {$ENDC}
  542. FUNCTION DebuggerUnlockMemory(address: UNIV Ptr; count: LONGINT): OSErr;
  543.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  544.     INLINE $225F, $205F, $7007, $A08D, $3E80;
  545.     {$ENDC}
  546. FUNCTION EnterSupervisorMode: StatusRegisterContents;
  547.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  548.     INLINE $7008, $A08D, $3E80;
  549.     {$ENDC}
  550.  
  551.     StripAddress and Translate24To32 are traps on classic 68K,
  552.     but macro to the identity function on PowerMacs or other OS's.
  553. }
  554. FUNCTION StripAddress(theAddress: UNIV Ptr): Ptr;
  555.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  556.     INLINE $201F, $A055, $2E80;
  557.     {$ENDC}
  558.  
  559. FUNCTION Translate24To32(addr24: UNIV Ptr): Ptr;
  560.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  561.     INLINE $201F, $A091, $2E80;
  562.     {$ENDC}
  563. FUNCTION HandToHand(VAR theHndl: Handle): OSErr;
  564. FUNCTION PtrToXHand(srcPtr: UNIV Ptr; dstHndl: Handle; size: LONGINT): OSErr;
  565.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  566.     INLINE $201F, $225F, $205F, $A9E2, $3E80;
  567.     {$ENDC}
  568. FUNCTION PtrToHand(srcPtr: UNIV Ptr; VAR dstHndl: Handle; size: LONGINT): OSErr;
  569. FUNCTION HandAndHand(hand1: Handle; hand2: Handle): OSErr;
  570.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  571.     INLINE $225F, $205F, $A9E4, $3E80;
  572.     {$ENDC}
  573. FUNCTION PtrAndHand(ptr1: UNIV Ptr; hand2: Handle; size: LONGINT): OSErr;
  574.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  575.     INLINE $201F, $225F, $205F, $A9EF, $3E80;
  576.     {$ENDC}
  577. {$IFC OLDROUTINENAMES }
  578. FUNCTION ApplicZone: THz;
  579.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  580.     INLINE $2EB8, $02AA;
  581.     {$ENDC}
  582. FUNCTION MFTempNewHandle(logicalSize: Size; VAR resultCode: OSErr): Handle;
  583.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  584.     INLINE $3F3C, $001D, $A88F;
  585.     {$ENDC}
  586. FUNCTION MFMaxMem(VAR grow: Size): Size;
  587.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  588.     INLINE $3F3C, $0015, $A88F;
  589.     {$ENDC}
  590. FUNCTION MFFreeMem: LONGINT;
  591.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  592.     INLINE $3F3C, $0018, $A88F;
  593.     {$ENDC}
  594. PROCEDURE MFTempHLock(h: Handle; VAR resultCode: OSErr);
  595.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  596.     INLINE $3F3C, $001E, $A88F;
  597.     {$ENDC}
  598. PROCEDURE MFTempHUnlock(h: Handle; VAR resultCode: OSErr);
  599.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  600.     INLINE $3F3C, $001F, $A88F;
  601.     {$ENDC}
  602. PROCEDURE MFTempDisposHandle(h: Handle; VAR resultCode: OSErr);
  603.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  604.     INLINE $3F3C, $0020, $A88F;
  605.     {$ENDC}
  606. FUNCTION MFTopMem: Ptr;
  607.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  608.     INLINE $3F3C, $0016, $A88F;
  609.     {$ENDC}
  610. PROCEDURE ResrvMem(cbNeeded: Size);
  611.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  612.     INLINE $201F, $A040;
  613.     {$ENDC}
  614. PROCEDURE DisposPtr(p: Ptr);
  615.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  616.     INLINE $205F, $A01F;
  617.     {$ENDC}
  618. PROCEDURE DisposHandle(h: Handle);
  619.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  620.     INLINE $205F, $A023;
  621.     {$ENDC}
  622. PROCEDURE ReallocHandle(h: Handle; byteCount: Size);
  623.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  624.     INLINE $201F, $205F, $A027;
  625.     {$ENDC}
  626. {$ENDC}  {OLDROUTINENAMES}
  627.  
  628. {$ALIGN RESET}
  629. {$POP}
  630.  
  631. {$SETC UsingIncludes := MacMemoryIncludes}
  632.  
  633. {$ENDC} {__MACMEMORY__}
  634.  
  635. {$IFC NOT UsingIncludes}
  636.  END.
  637. {$ENDC}
  638.